package com.leetcode.leetcode1;

/**
 * @program: 字符串转换整数
 * @author: luhd
 * @create: 2021-08-20
 */
public class Practice08 {
    public static void main(String[] args) {
        String s ="2147483648";
        int i = myAtoi(s);
        System.out.println(i);
    }

    /**
     *  思路：用while循环判断空格之后的起始位置，再判断起始位置的正负号，其次录入数字。
     *  用Character.isDigit()方法判断该字符是否位数字，再通过-'0'来获得int数字
     *  在得到最终数字之前判断它的值是否在int范围之内，不满足上述情况就直接break
     */
    public static int myAtoi(String s) {
        char[] arr = s.toCharArray();
        int len = s.length(); //字符串的长度
        int res = 0; //最后的数值
        int sign = 1; //判断数字的正负
        int i = 0; //判断字符串中数字的起始位置
        while(i<len && arr[i]==' '){
            i++;
        }
        int start = i;
        for(;i<len;i++){
            if(start==i&&arr[i]=='+'){
                sign = 1;
            }else if(start==i&&arr[i]=='-'){
                sign = -1;
            }else if(Character.isDigit(arr[i])){
                int num = arr[i] - '0';
                if(res>Integer.MAX_VALUE/10||(res==Integer.MAX_VALUE/10&&num>Integer.MAX_VALUE%10)){
                    return Integer.MAX_VALUE;
                }
                if(res<Integer.MIN_VALUE/10||(res==Integer.MIN_VALUE/10&&-num<Integer.MIN_VALUE%10)){
                    return Integer.MIN_VALUE;
                }
                res = res*10+ sign*num;
            }else{
                break;
            }
        }
        return res;
    }
}
